<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>函数式组件</title>
    </head>
    <body>
        <!-- 准备好DOM容器 -->
        <div id="test"></div>

        <!-- 必须按照顺序引入JS -->
        <!-- 引入React核心库 -->
        <script src="../js/react.development.js"></script>
        <!-- 引入react-dom库，用于操作DOM -->
        <script src="../js/react-dom.development.js"></script>
        <!-- 引入babel，用于将JSX翻译为JS -->
        <script src="../js/babel.min.js"></script>

        <!-- type必须为text/babel，代表里面的内容为JSX -->
        <script type="text/babel">
            // 1. 创建类式组件
            // 组件名（类名）必须使用PascalCase，且类式组件必须继承自React.Component
            class MyComponent extends React.Component {
                // 必须写render方法，并且render方法必须返回JSX
                render() {
                    // this为本类的实例
                    console.log(this);
                    return (
                        <h2>
                            我是用类定义的组件（适用于【复杂组件】的定义）
                        </h2>
                    );
                }
            }

            // 2. 渲染组件到页面
            // 使用组件时，render方法的第一个参数为组件标签
            ReactDOM.render(<MyComponent />, document.getElementById("test"));

            /**
             * 执行了ReactDOM.render()方法之后，发生了什么？
             *   1. React解析组件标签，找到了MyComponent组件。
             *   2. 发现组件是使用类定义的，随后创建该类的实例，并通过该实例调用原型上的render方法。
             *   3. 将render方法返回的虚拟DOM转为真实DOM，随后呈现在页面中。
             */
        </script>
    </body>
</html>
